#include "tacheMiseEnPalette.h"
#include "utils.h"
#include "string.h"
#include <stdio.h>


void handler_Au(int sig){
	MESSAGE_LOG_ERR msg;
	
	taskSuspend(taskIdSelf());
	getDateCourante(&(msg.sec),&(msg.min),&(msg.h),&(msg.jour),&(msg.mois),&(msg.annee));
	msg.type = LOG_ERREUR;
	strcpy(msg,"erreur Au");
	msgQSend(idBALErr,(char*)&msg,sizeof(MESSAGE_LOG_ERR),WAIT_FOREVER,MSG_PRI_NORMAL);
}

int MiseEnPalette(MSG_Q_ID idBalPalettes,MSG_Q_ID idBalErreurs,MSG_Q_ID idBalLogs,MSG_Q_ID idBalCartons, MSG_Q_ID idBalIhm, SEM_ID idSemClapet, SEM_ID idSemTaillePalette)
{
	char * msgCarton;
	CARTON * cartonTraite;
	PALETTE paletteTraite;
	TYPE_ERREUR erreur;
	MESSAGE_LOG_ERR msgLog;
	MESSAGE_IHM msgIhm;
	int idPalette = 1;
	
	idBALErr = idBalErreurs;
	signal(SIGUSR1,handler_Au);

	paletteTraite.id = idPalette;
	paletteTraite.nbCartons = 0;
	semTake(idSemTaillePalette,WAIT_FOREVER);
	while(paletteTraite.nbCartons < conditionnementLot)
	{
		msgQReceive(idBalCartons,msgCarton,sizeof(msgCarton),WAIT_FOREVER);
		cartonTraite = (CARTON *) msgCarton;
		if(cartonTraite->numLot == -1)
		{
			paletteTraite.numLot = -1;
			msgQSend(idBalPalettes,(char *)&paletteTraite,sizeof(PALETTE),WAIT_FOREVER,MSG_PRI_NORMAL);
			return 0;
		}
		else
		{
			if(paletteTraite.nbCartons == 0){
				paletteTraite.numLot = cartonTraite->numLot;
				paletteTraite.type = cartonTraite->type;
			}
			
			//ajouter carton
			paletteTraite.nbCartons++;
		}			
	}
	semGive(idSemTaillePalette);
	
	getDateCourante(&(paletteTraite.sec),&(paletteTraite.min),&(paletteTraite.h),&(paletteTraite.jour),&(paletteTraite.mois),&(paletteTraite.annee));
	
	msgQSend(idBalPalettes,(char*)&paletteTraite,sizeof(PALETTE),WAIT_FOREVER,MSG_PRI_NORMAL);
	
	//envoi du message de log
	msgLog.type = LOG_NORMAL;
	sprintf(msgLog.message,"Palette n�%d lot n�%d typePiece:%s envoy�e pour stockage",paletteTraite.id,paletteTraite.numLot,paletteTraite.type);
	msgLog.message[strlen(msgLog.message) + 1] = '\0';
	msgLog.h = paletteTraite.h;
	msgLog.min = paletteTraite.min;
	msgLog.sec = paletteTraite.sec;
	msgLog.jour = paletteTraite.jour;
	msgLog.mois = paletteTraite.mois;
	msgLog.annee = paletteTraite.annee;
	msgQSend(idBalLogs,(char*)&msgLog,sizeof(MESSAGE_LOG_ERR),WAIT_FOREVER,MSG_PRI_NORMAL);
	
	//envoi du message d'information "cr�ation de la palette" � l'IHM
	msgIhm.heures = paletteTraite.h;
	msgIhm.minutes = paletteTraite.min;
	msgIhm.secondes = paletteTraite.sec;
	msgIhm.type = MESSIHM_INFORMATION;
	strcpy(msgIhm.message,"stockee");
	msgIhm.typeObjet = 7;
	msgIhm.idObjet = paletteTraite.id;
	msgQSend(idBalIhm,(char*)&msgIhm,sizeof(MESSAGE_IHM),WAIT_FOREVER,MSG_PRI_NORMAL);
	

	idPalette++;
}

